package com.study.controller.HRcontroller;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import com.study.model.pojo.HRpojo.EmpTab;
import com.study.model.pojo.configPojo.Result;
import com.study.model.pojo.configPojo.ResultCode;
import com.study.model.pojo.configPojo.responsePojo.EmpRolePermResult;
import com.study.service.HRservice.EmpService;
import com.study.utils.JwtUtils;

//1.解决跨域
@CrossOrigin
@RestController
public class EmpController {

	@Autowired
	EmpService empService;
	
	//访问地址：http://localhost:8089/empAll
	@RequestMapping("/findAll")
//	@ResponseBody	//将List集合以JSON数组的形式返回，页面不跳转
	public List<EmpTab> findAll(){
		return empService.findAll();
	}
	
	/**测试sql
	 * @return
	 */
	@RequestMapping("/selectAll")
  public EmpTab selectAll() {
    return empService.selectAll();
  }
	
	@RequestMapping("/findByEmpid")
//	@ResponseBody	//将List集合以JSON数组的形式返回，页面不跳转
	public EmpTab findByEmpId(){
		return empService.findByEmpId("emp20160908001");
	}
	
	/**
   * 用户登录
   *  1.通过service根据账号和密码查询用户
   *  2.生成jwt信息
   *
   */
  @RequestMapping(value = "/login", method = RequestMethod.POST)
  public Result login(@RequestBody Map<String, String> empMap) {
    String empid = empMap.get("empid");
    String emppass = empMap.get("emppass");
    System.out.println(empid + "--" + emppass);
    //通过账号和密码查数据，查出来为空就登陆失败，不为空就登陆成功
    EmpTab findLogin = empService.findByEmpidAndEmppass(empid, emppass);
    //登录失败
    if (findLogin == null) {
      //返回失败的提示
      return new Result(ResultCode.MOBILEORPASSWORDERROR);
    } else {//登录成功
      Map<String, Object> map = new HashMap<>();
      map.put("emptel", findLogin.getEmptel());
      map.put("emptel", findLogin.getEmpnative());
      //获取token
      String token = new JwtUtils().createJwt(findLogin.getEmpid(), findLogin.getEmpname(), map);
      Result result = new Result(ResultCode.SUCCESS, token);

      return result;
    }

  }

  /**
   * 用户登录成功之后，获取用户信息
   *      1.获取用户id
   *      2.根据用户id查询用户
   *      3.构建返回值对象
   *      4.响应
   * 从请求头信息中获取token数据
   *   1.获取请求头信息：名称=Authorization
   *   2.替换Bearer+空格
   *   3.解析token
   *   4.获取clamis
   */
  @RequestMapping(value = "/profile", method = RequestMethod.POST)
  public Result profile(HttpServletRequest request) throws Exception {
    
    //验证请求头，判断是否是正确登陆，同时可以获取登陆人的账号
    String empid = new JwtUtils().getEmpid(request);
    
    //查出用户、权限等信息
    EmpTab findByEmpid = empService.findByEmpid(empid);
    //封装权限
    EmpRolePermResult empRolePermResult = new EmpRolePermResult(findByEmpid);

    return new Result(ResultCode.SUCCESS, empRolePermResult);
  }
  
  /**修改密码
   * @param request
   * @param pass
   * @param newPsaa
   * @return
   * @throws Exception 
   * @throws Exception
   */
  @RequestMapping(value = "/newPass", method = RequestMethod.POST)
  public Result newPass(HttpServletRequest request,@RequestBody Map<String, String> passMap) throws Exception {
    String pass = passMap.get("pass");
    String newPass = passMap.get("newPass");
    //验证请求头，判断是否是正确登陆，同时可以获取登陆人的账号
    String empid = new JwtUtils().getEmpid(request);
    //判断是否为空，以防系统错误，未接收到参数
    if (newPass!=null&&pass!=null) {
    //查出用户、权限等信息
      EmpTab empTab = empService.findByEmpid(empid);
      
      //判断页面填写的原密码和数据库的原密码是否相等
      if (empTab.getEmppass().equals(pass)) {
        //存入新密码
        empTab.setEmppass(newPass);
        
        //保存新密码
        EmpTab empTab2 = empService.newPass(empTab);
        if (empTab2!=null) {
          return new Result(ResultCode.SUCCESS);
        }
        
        return new Result(ResultCode.SERVER_ERROR);
      }
      return new Result(ResultCode.PASSWORDERROR);
    }else {
      return new Result(ResultCode.SERVER_ERROR);
    }
    
  }
	
}
